// pages/publish/publish.js - 发布动态页面
const { api } = require('../../utils/api');

Page({
  data: {
    content: '',           // 动态内容
    images: [],            // 图片列表
    selectedTopic: null,   // 选中的话题（从列表选择）
    customTopicName: '',   // 自定义话题名称
    topics: [],            // 话题列表
    showTopicPicker: false,// 显示话题选择器
    showTopicInput: false, // 显示话题输入框
    maxImages: 9,          // 最多上传9张图片
    maxContentLength: 500, // 最多500字
    publishing: false      // 发布中状态
  },

  onLoad() {
    this.loadTopics();
  },

  // 加载话题列表
  loadTopics() {
    api.community.getTopicList()
      .then(res => {
        this.setData({
          topics: res.data || []
        });
      })
      .catch(err => {
        console.error('加载话题失败', err);
      });
  },

  // 输入内容
  onContentInput(e) {
    const content = e.detail.value;
    if (content.length > this.data.maxContentLength) {
      wx.showToast({
        title: `最多输入${this.data.maxContentLength}字`,
        icon: 'none'
      });
      return;
    }
    this.setData({ content });
  },

  // 选择图片
  chooseImage() {
    const remainCount = this.data.maxImages - this.data.images.length;
    if (remainCount <= 0) {
      wx.showToast({
        title: `最多上传${this.data.maxImages}张图片`,
        icon: 'none'
      });
      return;
    }

    wx.chooseImage({
      count: remainCount,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePaths = res.tempFilePaths;
        this.setData({
          images: [...this.data.images, ...tempFilePaths]
        });
      }
    });
  },

  // 预览图片
  previewImage(e) {
    const index = e.currentTarget.dataset.index;
    wx.previewImage({
      current: this.data.images[index],
      urls: this.data.images
    });
  },

  // 删除图片
  deleteImage(e) {
    const index = e.currentTarget.dataset.index;
    const images = this.data.images.filter((_, i) => i !== index);
    this.setData({ images });
  },

  // 显示话题选择器
  showTopicSelector() {
    this.setData({ showTopicPicker: true });
  },

  // 隐藏话题选择器
  hideTopicSelector() {
    this.setData({ showTopicPicker: false });
  },

  // 选择话题
  selectTopic(e) {
    const index = e.currentTarget.dataset.index;
    const topic = this.data.topics[index];
    this.setData({
      selectedTopic: topic,
      customTopicName: '', // 清空自定义话题
      showTopicPicker: false
    });
  },

  // 显示自定义话题输入
  showCustomTopicInput() {
    this.setData({ 
      showTopicInput: true,
      showTopicPicker: false 
    });
  },

  // 隐藏自定义话题输入
  hideCustomTopicInput() {
    this.setData({ showTopicInput: false });
  },

  // 输入自定义话题
  onCustomTopicInput(e) {
    this.setData({ customTopicName: e.detail.value });
  },

  // 确认自定义话题
  confirmCustomTopic() {
    const topicName = this.data.customTopicName.trim();
    if (!topicName) {
      wx.showToast({
        title: '请输入话题名称',
        icon: 'none'
      });
      return;
    }

    this.setData({
      selectedTopic: null, // 清空选择的话题
      showTopicInput: false
    });

    wx.showToast({
      title: '话题已添加',
      icon: 'success'
    });
  },

  // 取消自定义话题
  cancelCustomTopic() {
    this.setData({ 
      customTopicName: '',
      showTopicInput: false 
    });
  },

  // 删除自定义话题
  deleteCustomTopic() {
    this.setData({ customTopicName: '' });
  },

  // 取消选择话题
  cancelTopic() {
    this.setData({ selectedTopic: null });
  },

  // 发布动态
  publish() {
    // 验证内容
    const content = this.data.content.trim();
    if (!content) {
      wx.showToast({
        title: '请输入动态内容',
        icon: 'none'
      });
      return;
    }

    if (this.data.publishing) {
      return;
    }

    this.setData({ publishing: true });

    wx.showLoading({ title: '发布中...' });

    // 如果有图片，先上传图片
    if (this.data.images.length > 0) {
      this.uploadImages()
        .then(imageUrls => {
          // 构建发布数据（带图片）
          this.submitPost(content, imageUrls);
        })
        .catch(err => {
          console.error('上传图片失败', err);
          wx.hideLoading();
          wx.showToast({
            title: '图片上传失败',
            icon: 'none'
          });
          this.setData({ publishing: false });
        });
    } else {
      // 没有图片，直接发布
      this.submitPost(content, []);
    }
  },

  // 上传图片
  uploadImages() {
    return api.community.uploadPostImages(this.data.images);
  },

  // 提交动态
  submitPost(content, imageUrls) {
    // 构建请求数据，按照后端接口要求
    const postData = {
      content: content,
      imageUrls: imageUrls.length > 0 ? JSON.stringify(imageUrls) : '',
      topicIds: [],
      topics: []
    };

    // 如果选择了话题（从列表选择）
    if (this.data.selectedTopic) {
      postData.topicIds = [this.data.selectedTopic.topicId];
      postData.topics = [{
        topicName: this.data.selectedTopic.topicName
      }];
    }
    // 如果输入了自定义话题
    else if (this.data.customTopicName.trim()) {
      postData.topics = [{
        topicName: this.data.customTopicName.trim()
      }];
      // 自定义话题没有 topicId，只传 topics
    }

    console.log('发布动态，请求数据：', postData);

    api.community.createPost(postData)
      .then(() => {
        wx.hideLoading();
        wx.showToast({
          title: '发布成功',
          icon: 'success'
        });
        
        // 延迟返回，让用户看到成功提示
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      })
      .catch(err => {
        console.error('发布失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '发布失败',
          icon: 'none'
        });
        this.setData({ publishing: false });
      });
  },

  // 取消发布
  cancel() {
    if (this.data.content || this.data.images.length > 0) {
      wx.showModal({
        title: '提示',
        content: '确定要放弃本次编辑吗？',
        success: (res) => {
          if (res.confirm) {
            wx.navigateBack();
          }
        }
      });
    } else {
      wx.navigateBack();
    }
  }
});
